package data_structure;

import java.util.ArrayList;
import java.util.List;

public class leetcode_0054 {
    public List<Integer> spiralOrder(int[][] matrix) {
        List<Integer> list=new ArrayList<>();
        int m=matrix.length;
        int n=matrix[0].length;
        int num=((m>n)?n:m)/2;
        int startx=0;
        int starty=0;
        int offset=1;
        for(int l=0;l<num;++l){
            int i=startx;
            int j=starty;
            for(;j<starty+n-offset;++j){
                list.add(matrix[i][j]);
            }
            for(;i<startx+m-offset;++i){
                list.add(matrix[i][j]);
            }
            for(;j>starty;--j){
                list.add(matrix[i][j]);
            }
            for(;i>startx;--i){
                list.add(matrix[i][j]);
            }
            startx+=1;
            starty+=1;
            offset+=2;
        }

            if(m<n&&m%2==1){
                for(int i=0;i<n-num*2;++i){
                    list.add(matrix[startx][starty+i]);
                }
            }
            if(m>n&&n%2==1){
                for(int i=0;i<m-num*2;++i){
                    list.add(matrix[startx+i][starty]);
                }
            }
            if(m==n&&m%2==1){
                list.add(matrix[m/2][n/2]);
            }
        return list;
    }
}
